package com.mark.web.data.mapper;

import com.mark.web.data.entity.po.Order;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * @Description: 订单dao接口，用于订单的数据库操作
 * @Author: Mark
 * @CreateDate: 2018/9/21
 * @Version: 2.0
 * @Copyright : 豆浆油条个人非正式工作室
 */
@Mapper
public interface OrderMapper {

    int insert(Order record);

    int insertSelective(Order record);

    int deleteByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Order record);

    int updateByPrimaryKey(Order record);

    /**
     *根据订单的id更改订单的状态
     * @param status ： 待更新的状态
     * @param orderId ： 订单的id
     */
    void closeOrderByOrderId(@Param("status") Integer status,
                             @Param("id") Integer orderId);

    Order selectByPrimaryKey(Integer id);

    /**
     * 根据订单号查找订单
     * @param orderNo ： 订单号
     * @return ：订单对象
     */
    Order selectByOrderNo(Long orderNo);

    /**
     * 根据用户id、订单号、店家id
     * @param currentUserId ： 当前的用户id
     * @param orderNo ： 订单号
     * @param sellerId ： 店家id
     * @return ： 订单对象
     */
    Order selectOrder(@Param("currentUserId") Integer currentUserId,
                      @Param("orderNo") Long orderNo,
                      @Param("sellerId") Integer sellerId);

    /**
     * 查找用户所有的订单
     * @param currentUserId ： 当前的用户id
     * @return ： 订单列表
     */
    List<Order> selectByUserId(@Param("currentUserId") Integer currentUserId);

    /**
     * 管理员查询所有的订单
     * @return ：订单列表
     */
    List<Order> selectAllOrder();

    /**
     * 店家查询所有的订单
     * @param sellerId ： 店家id
     * @return ： 订单；列表
     */
    List<Order> selectSellerOrders(@Param("sellerId") Integer sellerId);

    /**
     * 店家查看搜索订单
     * @param sellerId ：店家id
     * @param orderNo ：订单号
     * @return 订单对象
     */
    Order selectByOrderNoAndSellerId(@Param("sellerId") Integer sellerId,
                                     @Param("orderNo") Long orderNo);

    /**
     * 店家查找客户已经支付了订单
     * @param sellerId ：店家id
     * @param status ： 订单状态
     * @return ： 订单列表
     */
    List<Order> selectSellerOrdersPayed(@Param("sellerId") Integer sellerId,
                                        @Param("status") Integer status);

    /**
     *后台数据统计
     * @param status ：订单的状态
     * @return ：对应地方订单的转态的数量
     */
    int selectCount(@Param("status") Integer status);

    /**
     *查找指定时间的订单
     * @param status ：订单的状态
     * @param date ：时间
     * @return ：订单列表
     */
    List<Order> selectOrderStatusByCreateTime(@Param("status") Integer status,
                                              @Param("date") String date);



}